[IA64] GNTMAP_readonly support linux part
authorawilliam@xenbuild.aw <awilliam@xenbuild.aw>
Wed, 24 May 2006 16:59:28 +0000 (10:59 -0600)
committerawilliam@xenbuild.aw <awilliam@xenbuild.aw>
Wed, 24 May 2006 16:59:28 +0000 (10:59 -0600)
add read only mapping support.

Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
linux-2.6-xen-sparse/arch/ia64/xen/hypervisor.c
linux-2.6-xen-sparse/include/asm-ia64/hypercall.h

index b3983263c08e07632c05348baa5b69daced26f96..9f2e050c68a19a84e75db908f72f31fe14daac32 100644 (file)
@@ -314,12 +314,6 @@ gnttab_map_grant_ref_pre(struct gnttab_map_grant_ref *uop)
        uint32_t flags;
 
        flags = uop->flags;
-       if (flags & GNTMAP_readonly) {
-#if 0
-               xprintd("GNTMAP_readonly is not supported yet\n");
-#endif
-               flags &= ~GNTMAP_readonly;
-       }
 
        if (flags & GNTMAP_host_map) {
                if (flags & GNTMAP_application_map) {
@@ -517,6 +511,7 @@ xen_ia64_privcmd_entry_mmap(struct vm_area_struct* vma,
        int error = 0;
        struct xen_ia64_privcmd_entry* entry = &privcmd_range->entries[i];
        unsigned long gpfn;
+       unsigned long flags;
 
        BUG_ON((addr & ~PAGE_MASK) != 0);
        BUG_ON(mfn == INVALID_MFN);
@@ -527,8 +522,11 @@ xen_ia64_privcmd_entry_mmap(struct vm_area_struct* vma,
        }
        gpfn = (privcmd_range->res->start >> PAGE_SHIFT) + i;
 
-       error = HYPERVISOR_add_physmap(gpfn, mfn, 0/* prot:XXX */,
-                                      domid);
+       flags = ASSIGN_writable;
+       if (pgprot_val(prot) == PROT_READ) {
+               flags = ASSIGN_readonly;
+       }
+       error = HYPERVISOR_add_physmap(gpfn, mfn, flags, domid);
        if (error != 0) {
                goto out;
        }
index 45f65ebc2aae004b1bc97706541984af55944d64..79bc9c2b9ec4b46e15a5d733dac5d2320ae19e5b 100644 (file)
@@ -494,7 +494,7 @@ HYPERVISOR_zap_physmap(unsigned long gpfn, unsigned int extent_order)
 
 static inline unsigned long
 __HYPERVISOR_add_physmap(unsigned long gpfn, unsigned long mfn,
-                        unsigned int flags, domid_t domid)
+                        unsigned long flags, domid_t domid)
 {
        return _hypercall_imm4(unsigned long, ia64_dom0vp_op,
                               IA64_DOM0VP_add_physmap, gpfn, mfn, flags,
@@ -503,7 +503,7 @@ __HYPERVISOR_add_physmap(unsigned long gpfn, unsigned long mfn,
 
 static inline unsigned long
 HYPERVISOR_add_physmap(unsigned long gpfn, unsigned long mfn,
-                      unsigned int flags, domid_t domid)
+                      unsigned long flags, domid_t domid)
 {
        unsigned long ret = 0;
        BUG_ON(!running_on_xen);//XXX